<?php

require_once '../dlo/AssuntoDLO.php';
require_once '../dlo/GrupoDLO.php';
require_once '../dlo/UsuarioDLO.php';

class AssuntoController {

    private $cod_assunto;
    private $nome;
    private $row_id;
    private $campo_id;
    private $campo_valor;
    private $tipo_listagem;

    function __construct(&$cod_assunto, &$nome, &$row_id, &$campo_id, &$campo_valor, &$tipo_listagem) {
        $this->cod_assunto = &$cod_assunto;
        $this->nome = &$nome;
        $this->row_id = &$row_id;
        $this->campo_id = &$campo_id;
        $this->campo_valor = &$campo_valor;
        $this->tipo_listagem = &$tipo_listagem;
    }

    public function cadastrar() {
        try {
            $dlo = &AssuntoDLO::getInstance();
            $dlo->cadastrar($this->nome);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function alterar() {
        try {
            $dlo = &AssuntoDLO::getInstance();
            $dlo->alterar($this->row_id, $this->campo_id, $this->campo_valor);
            echo $this->campo_valor;
        } catch (Exception $e) {
            if ($e->getMessage() != 'no_action') {
                echo "Exception: " . $e->getMessage();
            } else {
                echo $this->campo_valor;
            }
        }
    }

    public function excluir() {
        try {
            $dlo = &AssuntoDLO::getInstance();
            $dlo->excluir($this->cod_assunto);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function listar() {
        try {
            $dlo = &AssuntoDLO::getInstance();
            $recurso = 'assunto';
            $result = &GrupoDLO::getInstance()->consultarPermissao(UsuarioDLO::getInstance()->getCod_grupo(), $recurso);
            $alteracao = '';
            $exclusao = '<td></td>';
            if ($result['alteracao'] == 'S') {
                $alteracao = 'class="cell_editable" title="Clique duas vezes para editar"';
            }
            if ($result['consulta'] == 'S') {
                if ($this->tipo_listagem == 'tabela') {
                    $lista = &$dlo->listar();
                    foreach ($lista as $row) {
                        if ($result['exclusao'] == 'S') {
                            $exclusao = '<td width="10px"><div class="ui-state-default ui-corner-all"  style="float: left">
                                <a href="javascript: void(0)"><span id="trash" class="ui-icon ui-icon-trash" onclick="showConfirm(\'Confirma exclusão?\',function() {manutencaoAssunto(\'excluir\',' . $row["cod_assunto"] . ');$(this).dialog(\'close\');})" title="Excluir"></span></a>
                            </div></td>';
                        }
                        echo '<tr id="' . $row["cod_assunto"] . '"><td id="nome" ' . $alteracao . '>' . $row["nome"] . '</td>';
                        echo $exclusao . '</tr>';
                    }
                } elseif ($this->tipo_listagem == 'xml') {
                    $xml = new XMLWriter();
                    $xml->openMemory();
                    $xml->startDocument('1.0', 'UTF-8');
                    $xml->startElement("lista");
                    foreach ($lista as $assunto) {
                        $xml->startElement("assunto");
                        $xml->writeElement('cod_assunto', $assunto['cod_assunto']);
                        $xml->writeElement('nome', $assunto['nome']);
                        $xml->endElement();
                    }
                    $xml->endElement();
                    header('Content-type: text/xml');
                    print $xml->outputMemory(true);
                }
            } else {
                throw new Exception('Sem permissão de consulta!');
            }
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

}

$controller = new AssuntoController($_POST['cod_assunto'], $_POST['nome'], $_POST['row_id'], $_POST['campo_id'], $_POST['campo_valor'], $_POST['tipo_listagem']);
if ($_POST['acao'] == 'cadastrar') {
    $controller->cadastrar();
} elseif ($_POST['acao'] == 'alterar') {
    $controller->alterar();
} elseif ($_POST['acao'] == 'excluir') {
    $controller->excluir();
} elseif ($_POST['acao'] == 'listar') {
    $controller->listar();
}
?>